home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / et / et-2_2.lha / et2.2 / src / ClipBoard.C < prev    next >
C/C++ Source or Header  |  1990-12-06  |  2KB  |  120 lines

  1. //$ClipBoard$
  2. #include "ClipBoard.h"
  3. #include "View.h"
  4. #include "IO/membuf.h"
  5. #include "ClassManager.h"
  6. #include "FileType.h"
  7.  
  8. //---- ClipBoard ---------------------------------------------------------------
  9.  
  10. ClipBoard::ClipBoard()
  11. {
  12.     type= (char*) cDocTypeUndef;
  13. }
  14.  
  15. ClipBoard::~ClipBoard()
  16. {
  17.     SafeDelete(mb);
  18. }
  19.  
  20. bool ClipBoard::CanPaste(class View *v)
  21. {
  22.     char *t= GetType();
  23.     if (v && t)
  24.     return v->CanPaste(t);
  25.     return FALSE;
  26. }
  27.  
  28. void ClipBoard::SetType(char *t)
  29. {
  30.     type= t;
  31. }
  32.  
  33. char *ClipBoard::GetType()
  34. {
  35.     if (! owner)
  36.     type= DevGetType();
  37.     return type;
  38. }
  39.  
  40. char *ClipBoard::DevGetType()
  41. {
  42.     return (char*) cDocTypeUndef;
  43. }
  44.  
  45. void ClipBoard::SelectionToClipboard(class View *v)
  46. {
  47.     extern bool gInPrintOn;
  48.     
  49.     if (v == 0)
  50.     return;
  51.     
  52.     if (mb)
  53.     delete mb;
  54.     mb= new membuf;
  55.     ostream os(mb);
  56.     owner= TRUE;
  57.     gClassManager->Reset();
  58.     gInPrintOn= TRUE;
  59.     char *t= GetType();
  60.     v->SelectionToClipboard(t, os);
  61.     os.flush();
  62.     gInPrintOn= FALSE;
  63.     gClassManager->Reset();
  64.     ScratchChanged(t ? t : cDocTypeUndef);
  65. }
  66.  
  67. Command *ClipBoard::PasteClipboard(class View *v)
  68. {   
  69.     Command *cmd= gNoChanges;
  70.     if (v) {
  71.     if (! owner) {
  72.         // get clipboard from server
  73.         mb= MakeBuf(type);
  74.         owner= TRUE;
  75.     }
  76.     if (mb) {
  77.         istream is(mb);
  78.         gClassManager->Reset();
  79.         cmd= v->PasteData(GetType(), is);
  80.         is.rewind();
  81.         gClassManager->Reset();
  82.     }
  83.     }
  84.     return cmd;
  85. }
  86.  
  87. membuf *ClipBoard::MakeBuf(char*)
  88. {
  89.     cerr << "no clipboard server\n";
  90.     return 0;
  91. }
  92.  
  93. void ClipBoard::NotOwner(char *t)
  94. {
  95.     if (t)
  96.     SetType(t);
  97.     owner= FALSE;
  98.     SafeDelete(mb);
  99. }
  100.  
  101. char *ClipBoard::GetBuf(u_long *size)
  102. {
  103.     if (mb) {
  104.     *size= mb->tell(TRUE);
  105.     return mb->Base();
  106.     }
  107.     *size= 0;
  108.     return 0;
  109. }
  110.  
  111. void ClipBoard::ScratchChanged(char*)
  112. {
  113.     static bool first= TRUE;
  114.     if (first) {
  115.     cerr << "no clipboard server\n";
  116.     first= FALSE;
  117.     }
  118. }
  119.  
  120.